package com.xuetang9.fujian.donamicproxy;

import java.lang.reflect.Proxy;

/**
 * @author: fujian
 * @description: 动态代理的精髓是：拦截，使用拦截器拦截要代理接口的方法 ，动态代理只能代理接口
 * 具体的操作步骤为：
 * 1、创建真正的做事情的对象
 * 2、创建拦截器，在拦截器中实现反射包中的invocationHandler接口中的invoke方法
 * 3、将真正做事情的对象传入拦截器中
 * 4、在测试中，使用反射动态创建代理对象，需要三个参数：代理对象的类加载器，代理的接口数组，拦截器
 * @date: 2021/5/1 10:23
 * @version: V1.0
 * @package: com.xuetang9.fujian.donamicproxy
 **/
@SuppressWarnings("all")
public class DonamicProxyTest {
    public static void main(String[] args) {
//        真正做事情的对象
        ILogin loginAndroid = new LoginAndroid();

//        使用jdk内部的proxy创建代理对象
        ILogin proxyLogin = (ILogin) Proxy.newProxyInstance(
          loginAndroid.getClass().getClassLoader(),
//          loginAndroid.getClass().getInterfaces(),
                new Class<?>[]{ILogin.class}, // 当前代理对象所代理的接口
                new LoginInvocationHandler(loginAndroid) // 处理程序对象
        );
        boolean result = proxyLogin.login("带一个参数");
    }
}
